#ifndef CLANG_FUNCTION_H
#define CLANG_FUNCTION_H

#include <DefineLibReflection.h>
// #include <QtCore/EString>
// #include <QtCore/EStringList>
#include <CppInfo.h>
#include <clang-c/Index.h>

namespace ClangFunction
{
	EString CXStringToEString(const CXString& s);
	EString getCursorFullName(CXCursor cursor);
	EString getCXTypeName(const CXType& type);
	EString getCursorFile(const CXCursor& cursor);
	bool IsRecursivelyPublic(CXCursor cursor);

    /**parse the c++ header file and convert to CppCollection*/
    REFLECTION_DLL void fileToCollection(CppInfo::CppFilePtr filePtr, CppInfo::CppCollectionPtr collPtr);

    CppInfo::ClassPtr cursorToClassPtr(CXCursor cursor);
    CppInfo::FunctionPtr cursorToFunctionPtr(CXCursor cursor);
    CppInfo::VariablePtr cursorToVariablePtr(CXCursor cursor);

    CXChildVisitResult callBackFile(CXCursor cursor, CXCursor parent, CXClientData client_data);
    CXChildVisitResult callBackClass(CXCursor cursor, CXCursor parent, CXClientData client_data);

    void fillClassParentNameList(CppInfo::ClassPtr classPtr, CppInfo::CppCollectionPtr coll, EStringList& pnList);

}


#endif // CLANG_FUNCTION_H
